推荐系统

您所在的位置:网站首页 转化率 ctr 推荐系统

推荐系统

2024-07-12 09:10| 来源: 网络整理| 查看: 265

一、CTR 模型建模

在讲 CTR 模型之前,我们首先要清楚 CTR 模型是什么,用来解决什么问题。所以我们先描述 CTR 问题,并对其进行数学建模。

一个典型的推荐系统架构如下图所示:

在这里插入图片描述

一般会划分为召回和排序两层。

召回负责从百万级物品中粗选出千级数量物品,常用算法有协同过滤、用户画像等,有时候也叫粗排层;排序负责对召回层召回的千级物品进行精细排序,也叫精排层;

CTR,Click-Through-Rate,也就是点击率预估,指的是精排层的排序。所以 CTR 模型的候选排序集一般是千级数量。

CTR 模型的输入(即训练数据)是:大量成对的 (features, label) 数据。

何为 features?可以分为如下四类:

用户本身特征,例如用户的年龄、性别等;用户行为特征,例如点击过的物品、购买过的商品等;上下文特征,例如用户登录设备(IOS or Android)、当前时间等;待排序物品特征,例如物品 ID、物品被点击次数、物品的点击率等;

可以看到,上面所有的 features 都是我们能够收集到的信息,其中有离散型特征(如物品 ID),也有连续型特征(如点击率)。

但是,计算机只能处理数字编码,所以需要对 features 进行编码。常用的编码手段有:

离散型特征使用 one-hot 或 embedding;连续型特征可以不处理,也可以分段离散化,再使用 one-hot 编码;

关于 one-hot 和 embedding,这里不召开讲,不了解的同学可以根据关键词进行搜索。

何为 label?

label 即为模型的预测目标,CTR 场景预测点击率,label 即为用户对该物品是否产生点击行为,点击则 label 为 1,不点击则 label 为 0;

在明确了 features 和 label 的定义之后,我们就可以构造对应的训练样本:

负样本 (不点击):([0,0,0,1,0,0,0.12,0.13,0.05, …, ], 0)正样本 (点击):([0,0,1,0,0,0,0.04,0.02,0.11, …, ], 1)

所以

训练时:CTR 模型输入即为:特征向量和其对应的 0, 1 标签。

预测时:输入只有特征向量,模型输出一个 0~1 之间的数字,代表预估的 CTR 值,可以用来做排序。

所以,建模之后,本质上 CTR 预估问题是一个二分类问题;

在继续介绍具体的 CTR 模型之前,我们先来看一看 CTR 模型的基本架构,如下图,最底层是原始特征,然后对原始特征进行筛选清洗,再进行编码转换(包括特征交叉),最后生成一个特征向量,输入到 model 中,model 输出 CTR 预测值。

在这里插入图片描述

实际中最主要的工作都在从原始特征生成特征向量这一步,这一步也叫数据处理,这一步的好坏决定了天花板的高度。至于模型,其实主要工作是调参,包括模型的种类也是一个参数,其实是最简单的一步,只是可能比较费时费力。

当然,实际中还有可能遇到超大规模数据的问题,这需要分布式训练,甚至最后的模型没办法在单机中加载,也需要分布式。

这篇文章的重点不是数据处理,也不是分布式训练,而是介绍业界 最主流的 CTR model 是什么样的。

下面开始进入正题。

二、最主流的CTR model 1、LR

对机器学习有过了解的同学应该都知道 LR,也就是逻辑回归,可以算是一个非常经典的模型。

在 CTR 问题中,LR 也可以算是最经典的模型之一。

我们的问题是二分类,输入是一个向量,LR 的思想最朴素:对向量的每一个维度赋予一个权重,然后加权求和,又因为输出需要是 0~1 之间的浮点数,所以求和之后套用一个 sigmoid 函数(不了解该函数的同学请自行 google),将值域压缩在 0~1 之间,完毕。

下面这个例子比较形象:

在这里插入图片描述

LR 的数学公式:

在这里插入图片描述

其中 x 是特征向量,w 是权重向量。

优点:简单,容易实现; 缺点:易学难精,需要手工构造特征(特征交叉),需要大量领域内知识;另外,LR 非常适合处理离散特征,而对于连续特征,需要手工分段或归一化处理。

LR 非常简单,以至于很难让人相信它能有很好的效果。但事实就是,即使是现在,有很多公司仍然在使用 LR 模型做 CTR 预估。为什么呢?秘诀在于手工构造特征(特征交叉)。

特征交叉是什么?

组合特征的方式,例如有两个原始特征:年龄和性别。对应于 LR 就只有 2 个权重,但事实上我们可以将 “年龄x性别” 作为一个组合特征,构造出第三个特征,这样 LR 就有 3 个权重了。“18岁的男性” 就是组合特征 “年龄x性别” 的一种情况。

为什么需要手工构造特征(交叉特征)?

LR 本质上是线性模型,只能捕捉到低阶特征,无法表达高阶特征信息,特征交叉本质是手工构造高阶特征的过程(特征的阶数可以类比代数几何中多项式的阶数)。

只要特征交叉做的足够好,简单的 LR 就可以取得非常好的效果。

2、GBDT

Gradient Boosting Decison Tree,梯度提升决策树。是算法比赛中使用最多的模型之一。

核心思想:用回归树(CART 树)来拟合残差。 常用工具包:Xgboost,Lightgbm。

GBDT 使用的是 CART 树,是回归树的一种,如下图所示,回归树最后的预测结果是一个浮点数。

在这里插入图片描述

GBDT 使用多颗 CART 树,每棵树都是拟合前面树模型的残差。

在这里插入图片描述

限于篇幅,这里不展开讲 GBDT 的具体原理,建议不了解的同学深入学习一下,拟合残差的思想是非常经典的。

优点:得益于 CART 树,可以方便地处理连续特征;另一个重要用处是输出特征重要性; 缺点:比较容易过拟合,不是很适合处理离散特征。

3、GBDT + LR

问题背景:前面提到,LR 不适合处理连续型特征(如物品点击率、播放次数等),但实际应用场景中,连续型特征非常常见。

但是 GBDT 又非常适合处理连续特征,于是 Facebook 提出一种解决方案:GBDT + LR。核心思想是利用 GBDT 来自动对连续特征离散化。

如右图所示,可以通过 GBDT 中叶子节点的索引位置获得输入特征的离散化编码,可以看到,结果分别落在第 2 和第 1个叶子节点,转换特征编码为 [0, 1, 0] + [1, 0],即 [0, 1, 0, 1, 0],之后再将该编码输入到 LR 中训练。

在这里插入图片描述

优点:无需对连续特征手工处理; 缺点:需要预训练 GBDT 模型;

4、FM (Factorization Machines)

问题背景:前面提到 LR 还有一个缺点,就是需要很多领域知识做人工特征交叉;

有没有办法将特征交叉这一过程自动化呢?

FM 就是为解决一个问题提出来的。

先看 LR 的线性部分:

在这里插入图片描述

可以看到,LR 没有考虑特征之间的相关性;例如 18 岁的男性相对于 18 岁的人和男性,喜欢电子游戏的概率明显要更大。LR 使用人工的方法,手动挖掘这类关联特征。

考虑极端情况,对所有特征进行二阶交叉:

在这里插入图片描述

但这里会有一个问题:若特征数是 100w 级别,那么全交叉之后,特征数为 10000亿级别,对应的权重也有 10000亿,用单精度浮点数存储,需要 1TB,明显是不可能实现的。

所以,在 FM 提出之前,需要专家从海量可能的交叉特征中选取部分,然后实验,接着再选取。

FM 解决全交叉导致权重爆炸的核心思想是:权重的分解和共享,这也是其命令的由来。

先看分解,FM 提出将交叉特征的权重 wij 做一次分解,分解为两个隐向量(lantent vector)的乘积,如下:

在这里插入图片描述

其中,

在这里插入图片描述

< ,> 代表向量乘法,k 是超参数,即 lantent vector 的维度。

光分解还是不够,因为权重爆炸的问题并没有解决,所以接下来就是共享隐向量:每个原始特征都对应同一个隐向量,这个隐向量是被所有该特征的交叉特征权重共享的。这样一来,若有 N 个基本特征,共享之后的参数量就为 N*k,而不是 N*N 了,一般情况 k



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3